"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/3/17 11:00
@Description : 
使用多进程可以实现任务并发执行，增加了程序的执行效率
但是,多个进程的使用，会非常的消耗计算机的资源 开辟一个进程就会分配一些计算机的硬件资源

在一个进程中运行多个线程，用多线程的方式执行多个任务，多个线程可以共享一个进程向计算机申请的资源空间
线程要依附于进程，一个进程中至少要有一个线程  执行任务是通过线程执行的


"""
import threading, time
import os


# 任务1
def sing(num, name):
    print(
        f'sing任务所在线程名:{threading.current_thread().name},sing任务所在线程编号:{threading.current_thread().ident}')
    for i in range(num):
        print(f'正在唱{name}歌...')
        time.sleep(1)


# 任务2
def dance(num, name):
    print(
        f'dance任务所在线程名:{threading.current_thread().name},dance任务所在线程编号:{threading.current_thread().ident}')
    for i in range(num):
        print(f'正在跳{name}舞...')
        time.sleep(1)


"""
 如何创建线程：
   1. 导入模块  import  threading
   2. 创建线程  threading.Thread(target)
   3. 开启线程  start()
"""
# 线程  有参数需要传递 可以参照进程   daemon 设置线程为守护主线程
sing_thread = threading.Thread(target=sing, args=(3, '搀扶'), daemon=True)
dance_thread = threading.Thread(target=dance, kwargs={'num': 3, 'name': '街舞'})

"""
 开启线程之前设置守护主线程  实现在主线程执行结束后，子线程全部销毁
    # 设置当前线程为守护线程    DeprecationWarning
    sing_thread.setDaemon(True)
    dance_thread.setDaemon(True)     
"""

# 开启线程  两线程是并发关系  谁拿到cpu运行时间谁执行
sing_thread.start()
dance_thread.start()

#  执行完成以下代码 主线程会等待子线程任务完成之后在结束
time.sleep(1)
# print('主进程:',os.getpid())
# 获取当前线程名    线程编号
print(f'主线程名:{threading.current_thread().name},主线程编号:{threading.current_thread().ident}')
